package cn.tedu.file;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

/*本类用于测试文件类File*/
public class TestFile {
    public static void main(String[] args) throws IOException {
        //1.创建File类对象
        /*1.File需要导包:import java.io.File;
         * 2.路径是String类型,必须写正确,不然找不到文件
         * 3.完整的文件名包含两部分:文件名+后缀名
         * 4.ready文件夹与1.txt需要自己手动创建*/
        File file = new File("D:\\ready\\1.txt");
        //2.测试常用方法
        System.out.println(file.length());//3,获取当前文件的字节量  因与键盘下: 汉字占用3字节,字母数字1个字节
        System.out.println(file.exists());//true,判断文件是否存在
        System.out.println(file.isFile());//true,判断当前file对象是文件吗
        System.out.println(file.isDirectory());//false,判断当前file对象是文件夹吗
        System.out.println(file.getName());//1.txt,获取文件完整的名字
        System.out.println(file.getParent());//D:\ready 获取文件的父级路径
        System.out.println(file.getAbsolutePath());//D:\ready\1.txt 获取带盘符的文件的绝对路径

        //3.测试创建与删除
        /*new只会帮你在内存中创建一个File类型的对象
         * 并不会帮你在磁盘中创建一个真实存在的2.txt*/
        File file2 = new File("D:\\ready\\2.txt");
        //创建一个之前不存在的文件2.txt,如果创建成功,会返回true
        /*如果指定创建文件的路径不对,会抛出异常
         * 所以我们需要提前处理这个问题,暂时选择在main()上抛出
         * 这个IO异常是目前我们遇到的强制要求必须预先处理的异常
         * 如果不处理,方法的调用会报错,通不过编译*/
        System.out.println(file2.createNewFile());//创建不存在的文件

        File file3 = new File("D:\\ready\\m");
        System.out.println(file3.mkdir());//创建不存在的单层文件夹

        //创建文件件
        File file4 = new File("D:\\ready\\a\\b\\c");
        System.out.println(file4.mkdirs());//创建不存在的多层文件夹

        /*delete()只能删除文件和空文件夹*/
        file2.delete();//删除文件2.txt
        file4.delete();//删除空文件夹c
        file3.delete();//直接删除了空文件夹m

        //4.测试展现文件列表
        File file5 = new File("D:\\ready");
        String[] list = file5.list();/*不常用*/
        System.out.println(Arrays.toString(list));//[1.txt, a]
        //这句话会报错,因为这是一个String[],所以数组中的每个元素都是String类型的
        //那么我们只能使用String类中的方法,getName()是File类的方法,在这里不能用
//        System.out.println(list[0].getName());

        File[] fs = file5.listFiles();/*常用*/
        System.out.println(Arrays.toString(fs));//[D:\ready\1.txt, D:\ready\a]
        System.out.println(fs[0].getName()); //File类才有getName(),String类没有getName,,,
        System.out.println(fs[1].getName());
    }
}
